課程資訊
課程名稱
軟體設計模式
Software Design Patterns 
開課學期
100-1 
授課對象
電機資訊學院  資訊工程學系  
授課教師
陳俊良 
課號
CSIE3013 
課程識別碼
902 39600 
班次
 
學分
全/半年
半年 
必/選修
選修 
上課時間
星期一2,3,4(9:10~12:10) 
上課地點
資107 
備註
限學士班學生 且 限學士班三年級以上 且 限本系所學生(含輔系、雙修生)
總人數上限:50人 
Ceiba 課程網頁
http://ceiba.ntu.edu.tw/1001designPatterns 
課程簡介影片
 
核心能力關聯
核心能力與課程規劃關聯圖
課程大綱
為確保您我的權利,請尊重智慧財產權及不得非法影印
課程概述

軟體是利用程式語言撰寫的;所以程式語言技巧是開發軟體的必備條件。一般而言,擇定一個語言 (language) 並遵循其理念,是會引導程式 (program) 的寫法。比如,利用物件導向 (object-oriented) 語言來撰寫程式時,很自然就會導入繼承 (inheritance) 的概念。我們會想台大學生是個台大人,所以我們寫出 class NtuStudent extends NtuHuman。
但是只熟悉語言的技巧不代表開發得出好的程式。原因之一是軟體擁有art的成分,這樣寫可以,那樣寫未嘗不可。更嚴重的是,全然遵循語言的理念,不見得寫出來的就是最適當的程式。比如,台大老師也是個台大人,所以我們寫class NtuTeacher extends NtuHuman。當一個台大人由台大學生變身成台大老師時,其NtuStudent的個體 (instance) 跟其NtuTeacher的個體應該代表同一個台大人。但是如上述遵循語言理念寫出來的程式,沒有辦法讓一個NtuStudent個體與一個NtuTeacher個體共用相同的姓名、出生年月日等NtuHuman的資料。
軟體結構的取捨是個學問,尤其是想要開發出一個可長可久易於修改維護的軟體系統。所謂的design patterns就是由前人開發軟體的經驗中,擷取出來的好的軟體結構。懂得design patterns進而可以適時引用,將有助於開發出好的軟體系統。 

課程目標
本課程的目標在於讓修課同學:
* 認識GoF的23個design patterns。理解各個design pattern的結構、適用場合、實作技巧、實務考量、…。
* 補充關於物件導向程式語言的知識。如,使用語言的技巧、語言的設計理念等。
* 了解程式語言以及design patterns的相輔相成。
* 培養評比軟體好壞的習慣與能力。
* 有能力引用design patterns到程式的開發。 
課程要求
先修課程:熟悉 Java 或是 C# 語言 
預期每週課後學習時數
 
Office Hours
每週一 12:00~13:00 備註: 大部分時間我都在系館,請直接到509室找我,或者請eMail約時間 
指定閱讀
 
參考書目
1. E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements
of Reusable Object-Oriented Software. Addison-Wesley, 1995.
2. E. Freeman, E. Freeman, K. Sierra and B. Bates. Head First Design Patterns.
O’Reilly, 2004.
3. S. Metsker and W. Wake. Design Patterns in Java. Addison-Wesley, 2006.
4. M. Fowler, K. Beck, J. Brant, W. Opdyke. Refactoring: Improving the Design
of Existing Code. Addison-Wesley, 1999.
5. J. Bloch. Effective Java. 2nd Ed. Addison-Wesley, 2008.
 
評量方式
(僅供參考)
 
No.
項目
百分比
說明
1. 
課堂表現 (含 code review 參與情形) 
20% 
暫訂,教師保留更改之權利。 
2. 
作業 
30% 
暫訂,教師保留更改之權利。 
3. 
期中考 
20% 
暫訂,教師保留更改之權利。 
4. 
期末報告 
30% 
暫訂,教師保留更改之權利。 
 
課程進度
週次
日期
單元主題
無資料